package com.start.workflow.core.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.start.workflow.common.enums.StartBaseActConfEnum;
import com.start.workflow.entity.StartActModelConfig;

import java.util.List;
import java.util.Map;

public interface StartActModelConfigService extends IService<StartActModelConfig> {
    /**
     * 最新的流程模型全部配置
     *
     * @param modelId
     * @return
     */
    List<StartActModelConfig> getActConfigsByModelId(String modelId);


    /**
     * 查询指定流程模型配置
     * 返回结构为 <actType,<defKey,<confType,StartActModelConfig>>>
     *
     * @param modelId
     * @return
     */
    Map<String, Map<String, Map<String, StartActModelConfig>>> getActModelConfigMapByModelId(String modelId);

    /**
     * 删除最新的流程模型配置
     *
     * @param modelId 模型id
     */
    void removeByModelId(String modelId);

    /**
     * 查询指定发布id的全部配置
     *
     * @param deployId 发布id
     * @return
     */
    default List<StartActModelConfig> getActModelConfigs(String deployId) {
        return getActModelConfigs(deployId, null);
    }

    /**
     * 查询指定发布id，指定actType 的全部配置
     *
     * @param deployId
     * @param actType
     * @return
     */
    List<StartActModelConfig> getActModelConfigs(String deployId, StartBaseActConfEnum actType);

    /**
     * 查询指定部署id配置数量
     *
     * @param deployId 部署id
     * @return
     */
    default long getActModelConfigCount(String deployId) {
        return getActModelConfigCount(deployId, null);
    }

    /**
     * 查询指定部署id配置数量
     *
     * @param deployId 部署id
     * @param actType  actType类型
     * @return
     */
    long getActModelConfigCount(String deployId, StartBaseActConfEnum actType);


    /**
     * 查询指定发布id， 的全部配置并分组
     * 返回结构为 <actType,<defKey,<confType,StartActModelConfig>>>
     *
     * @param deployId
     * @return
     */
    Map<String, Map<String, Map<String, StartActModelConfig>>> getActModelConfigMap(String deployId);

    /**
     * 查询指定发布id，指定actType的全部配置并分组
     * 返回结构为  <defKey,<confType,StartActModelConfig>>
     *
     * @param deployId
     * @param actType
     * @return
     */
    Map<String, Map<String, StartActModelConfig>> getActModelConfigMap(String deployId, StartBaseActConfEnum actType);

    /**
     * 查询指定发布id，指定actType的全部配置并分组
     * 返回结构为   <confType,StartActModelConfig>>
     *
     * @param deployId
     * @param actType
     * @return
     */
    Map<String, StartActModelConfig> getActModelActTypeConfigMap(String deployId, StartBaseActConfEnum actType);


    /**
     * 获取模型配置
     *
     * @param deploymentId 流程发布id
     * @param defKey       定义key
     * @param actType
     * @return
     */
    StartActModelConfig getActModelConfig(String deploymentId, String defKey, StartBaseActConfEnum actType);
}
